package com.papercutting.platform.service;

import com.papercutting.platform.dto.query.TutorialQuery;
import com.papercutting.platform.dto.request.TutorialRequest;
import com.papercutting.platform.dto.response.PageResult;
import com.papercutting.platform.dto.response.TutorialResponse;

import java.util.List;
import java.util.Map;
import com.papercutting.platform.entity.Tutorial;

/**
 * 教程服务接口 - 重构为标准DTO模式
 */
public interface TutorialService {
    
    /**
     * 创建教程
     */
    Long createTutorial(TutorialRequest request);
    
    /**
     * 更新教程
     */
    void updateTutorial(TutorialRequest request);
    
    /**
     * 删除教程
     */
    void deleteTutorial(Long id);
    
    /**
     * 根据ID获取教程详情（包含步骤）
     */
    Map<String, Object> getTutorialById(Long id);
    
    /**
     * 分页查询教程列表
     */
    PageResult<TutorialResponse> getTutorialPage(TutorialQuery query);
    
    /**
     * 获取教程列表（不分页）
     */
    List<TutorialResponse> getTutorialList(TutorialQuery query);
    
    /**
     * 获取推荐教程列表
     */
    List<TutorialResponse> getRecommendedTutorials(Integer limit);
    
    /**
     * 获取免费教程列表
     */
    List<TutorialResponse> getFreeTutorials(Integer limit);
    
    /**
     * 增加浏览量
     */
    void increaseViewCount(Long id);
    
    /**
     * 搜索教程内容
     */
    PageResult<TutorialResponse> searchTutorial(String keyword, TutorialQuery query);
    
    /**
     * 获取分类统计
     */
    List<Map<String, Object>> getCategoryStats();
    
    /**
     * 批量更新状态
     */
    void batchUpdateStatus(List<Long> ids, Integer status);
    
    /**
     * 获取所有教程
     */
    List<Tutorial> findAll();
    
    /**
     * 点赞/取消点赞教程
     */
    Map<String, Object> likeTutorial(Long tutorialId, Long userId);
    
    /**
     * 收藏/取消收藏教程
     */
    Map<String, Object> favoriteTutorial(Long tutorialId, Long userId);
    
    /**
     * 获取用户对教程的互动状态
     */
    Map<String, Object> getTutorialInteraction(Long tutorialId, Long userId);
}